\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shadows, arrows}

\renewcommand{\familydefault}{\sfdefault}

\definecolor{lightBlue}{RGB}{46, 172, 228}
\definecolor{darkBlue}{RGB}{30, 65, 81}

\tikzset{
    shade border north to south/.style args={#1 to #2}{
        postaction={draw, very thick, path fading=south, #1},
        postaction={draw, very thick, path fading=north, #2}
    }
}

\begin{document}
\begin{tikzpicture}[
	class/.style={
		rounded corners, rectangle, draw, align=center, top color=lightBlue,
		bottom color=darkBlue, text=white, drop shadow, shade, shade border
		north to south=lightBlue!97!black to darkBlue!97!black, text width=2.5cm, anchor=mid
	}
]
\node[class] (Sim) at (0,0) {Simulation};

% Time Step
\node[class] (Time) at (-9, -1.5) {TimeStep};
	% Pressure Solvers
	\foreach \x/\y in {WCSPH/0, PCISPH/1, PBF/2, IISPH/3, DFSPH/4, PF/5} {
		\node[class] (\x) at (-10, -3 - \y*0.6) {\x};
		\draw[ultra thick] (-8, -2.4 - \y*0.6) -- (-8, -3 - \y*0.6); 
		\draw[ultra thick] (-8, -3 -\y*0.6) -- (\x);
	}

% Fluid Models
\node[class] (Fluid) at (-3, -1.5) {FluidModel};
	% Non Pressure Force Base Class
	\node[class] (NonPressure) at (-5, -3) {NonPressure ForceBase};
		%Non Pressure Forces Implementation
		\foreach \x/\y in {DragBase/-4.5, ElasticityBase/-5.175, ViscosityBase/-6.875, VorticityBase/-7.55} {
			\node[class] (\x) at (-6, \y) {\x};
			\draw[ultra thick] (\x) -- (-4, \y);
		}
		\node[class] (SurfaceTension Base) at (-6, -5.85) {SurfaceTension Base};
		\draw[ultra thick] (SurfaceTension Base) -- (-4, -6);
% Emitters
\node[class] (Emitter) at (-1, -3) {EmitterSystem};
	% Emitter Implementation
	\node[class] (Emit) at (-1, -4.5) {Emitter};

% Boundaries
\node[class] (Boundary) at (3, -1.5) {BoundaryModel};
	% Boundary classes
	\node[class] (Static) at (4, -3) {StaticRigidBody};
	\node[class] (Dynamic) at (4, -3.675) {PBDRigidBody};

% AnimationFieldSystem
\node[class] (AnimField) at (9, -1.5) {AnimationField System};
	% Animation Fields
	\node[class] (Anim) at (9, -3.5) {AnimationField};

% Lines
\draw[ultra thick] (Sim) -- node[right] {$1$} (0, -.75);

\draw[ultra thick] (0, -.75) -- (-9, -.75) -- node[right] {$1$} (Time);
\draw[ultra thick] (-3, -.75) -- node[right] {$1..^*$} (Fluid);
\draw[ultra thick] (0, -.75) -- (3, -.75) -- node[right] {$0..^*$} (Boundary);
\draw[ultra thick] (3, -.75) -- (9, -.75) -- node[right] {$1$} (AnimField);

\draw[{triangle 90}-, ultra thick] (-8,-1.775) -- (-8, -3);

\draw[ultra thick] (Fluid) -- node[right] {$1$} (-3, -2.25);
\draw[ultra thick] (-3, -2.25) -- (-5, -2.25);
\draw[ultra thick] (-5, -2.22) -- node[right] {$5$} (NonPressure);
\draw[ultra thick] (-3, -2.25) -- (-1, -2.25);
\draw[ultra thick] (-1, -2.22) -- node[right] {$1$} (Emitter);

\draw[{triangle 90}-, ultra thick] (-4, -3.625) -- (-4, -7.55);

\draw[ultra thick] (Emitter) -- node[right, yshift=-.75em] {$0..^*$} (Emit);

\draw[ultra thick] (2, -1.775) -- node[right, yshift=1em] {$1$} (2, -3) -- (2, -3.675);
\draw[ultra thick] (2, -3) -- node[above] {$0..1$} (Static);
\draw[ultra thick] (2, -3.675) -- node[above] {$0..1$} (Dynamic);

\draw[ultra thick] (AnimField) -- node[right, yshift=-.75em] {$0..^*$} (Anim);
\end{tikzpicture}
\end{document}